package _go

/*实现 pow(x, n) ，即计算 x 的 n 次幂函数（即，xn）。



示例 1：

输入：x = 2.00000, n = 10
输出：1024.00000
示例 2：

输入：x = 2.10000, n = 3
输出：9.26100
示例 3：

输入：x = 2.00000, n = -2
输出：0.25000
解释：2-2 = 1/22 = 1/4 = 0.25
。*/

//分治法
func myPow(x float64, n int) float64 {
	if n < 0 {
		return 1.0 / myPowDc(x, -n)
	} else {
		return myPowDc(x, n)
	}
}

func myPowDc(x float64, n int) (res float64) {
	if n == 0 {
		return 1
	}
	//计算一次就够了 要不超时
	y := myPowDc(x, n/2)
	res = y * y
	//奇数
	if n%2 == 1 {
		res *= x
	}
	return
}

//暴力破解 待验证
/*
func myPow(x float64, n int) float64 {
    if x == 0 || x == 1 {
        return x
    }
    if n == 0{
        return 1
    }

    f := false
    if n < 0 {
        f = true
        n = -n
    }

    res := 0.0
    for i:=1 ; i<= n;i++{
        if res == 0.0{
            res = x
        }else{
            res *= x
        }
    }

    if f {
        res = 1 / res
    }

    return res
}
*/
